package com.qf.qfcenterdata.service;

import com.qf.common.constant.MongoDBConstant;
import com.qf.common.model.DeviceCmd;
import com.qf.common.model.DeviceModelValue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.index.Index;
import org.springframework.data.mongodb.core.index.IndexDefinition;
import org.springframework.stereotype.Service;

import java.util.Date;

@Service
public class MongoService {

    @Autowired
    private MongoTemplate mongoTemplate;

    public void saveDeviceModelValue(DeviceModelValue deviceModelValue) {

        deviceModelValue.setCreateTime(new Date());

        String collectionName = MongoDBConstant.DEVICE_DATA_COLLECTION_PREFIX + deviceModelValue.getProduct_key();

        //判断集合是否存在（存在-不需要做索引创建-已经做过了；不存在-需要创建索引-device&createTime）
        if (!mongoTemplate.collectionExists(collectionName)){
            //不存在-创建索引
            Index idxDef = new Index();
            idxDef
                //后台创建
                .background()
                //基于指定key创建索引
                .on("device", Sort.Direction.DESC)
                //指定索引的名字
                .named("idx_device");
            mongoTemplate.indexOps(collectionName).ensureIndex(idxDef);

            idxDef = new Index();
            idxDef
                    //后台创建
                    .background()
                    //基于指定key创建索引
                    .on("createTime", Sort.Direction.DESC)
                    //指定索引的名字
                    .named("idx_createTime");
            mongoTemplate.indexOps(collectionName).ensureIndex(idxDef);
        }

        //保存数据
        mongoTemplate.insert(deviceModelValue,collectionName);
    }

    public void saveDeviceCmd(DeviceCmd deviceCmd) {
        String collectionName = MongoDBConstant.DEVICE_CMD_COLLECTION_PREFIX + deviceCmd.getProductKey();
        //判断集合是否存在（存在-不需要做索引创建-已经做过了；不存在-需要创建索引-device&createTime）
        if (!mongoTemplate.collectionExists(collectionName)){
            //不存在-创建索引
            Index idxDef = new Index();
            idxDef
                    //后台创建
                    .background()
                    //基于指定key创建索引
                    .on("deviceKey", Sort.Direction.DESC)
                    //指定索引的名字
                    .named("idx_deviceKey");
            mongoTemplate.indexOps(collectionName).ensureIndex(idxDef);

            idxDef = new Index();
            idxDef
                    //后台创建
                    .background()
                    //基于指定key创建索引
                    .on("createTime", Sort.Direction.DESC)
                    //指定索引的名字
                    .named("idx_createTime");
            mongoTemplate.indexOps(collectionName).ensureIndex(idxDef);
        }

        mongoTemplate.insert(deviceCmd,collectionName);
    }
}
